<?php
/**
 * MVM_MALL 网上商店系统
 * ============================================================================
 * 版权所有 (C) 2007-2010 www.mvmmall.com，并保留所有权利。
 * 网站地址: http://www.mvmmall.com
 * ----------------------------------------------------------------------------
 * 这是一个免费开源的软件；这意味着您可以在不用于商业目的的前提下对程序代码
 * 进行修改、使用和再发布。
 * ============================================================================
 * 
 * @author :     www.mvmmall.com <admin@mvmmall.com> 
 * @version :    v4.X 
 * @module:      Discuz论坛系统
---------------------------------------------
 */
if(!defined('MVMMALL')){
    exit('Access Denied');
}
//插件的代码必须和文件名保持一致
$passport['discuz']['name']    = 'Discuz论坛系统';
//描述
$passport['discuz']['desc']    = 'Discuz论坛系统';
//版权信息
$passport['discuz']['license']  = '版权所有www.mvmmall.com';
//接口需要的参数
$passport['discuz']['cfg'] =array(
        array('name' => 'passport_api', 'value' => 'http://linux.mvmmall.com/discuz/api/passport.php','label'=>'Discuz接口地址'),
        array('name' => 'passport_key', 'value' => '','label'=>'密 钥'),
        array('name' => 'charset', 'value' => 'gb2312','label'=>'数据库编码'),
        );
    
class discuz
{
    var $cfg;
    
    function  discuz($cfg = array())
    {
        foreach ($cfg AS $key=>$val)
        {
            $this->cfg[$val['name']] = $val['value'];
        }
    }
        //编码转换
    function charset($string)
    {
        if($this->cfg[charset]=='gb2312' || $this->cfg[charset]=='gbk'){
            $string=iconv("UTF-8","gb2312","$string");
        }
        return $string;
    }
    
/*提交请求 注册请求信息 $table_member 会员信息*/
function post_reg($table_member)	
	{  
	  
	}
	
/*提交请求 登陆请求信息 $table_member 会员信息*/
function post_login($table_member)	
	{  
	    $m_now_time = time();
	    $action = 'login'; 
	    $forward='';
	    $username            =  $this->charset($table_member[member_id]);
        $password            = $table_member[member_pass];
        $email               = $table_member[member_email];
        $credits             = $table_member[member_point];
        $txt="time=".$m_now_time."&username=".$username."&password=".$password."&email=".$email."&credits=".$credits;
        $auth=passport_encrypt($txt,$this->cfg[passport_key]);
        $verify=md5($action.$auth.$forward.$this->cfg[passport_key]);
        header('Location:'.$this->cfg[passport_api].'?action='.$action.'&auth='.urlencode($auth).'&forward='.urlencode($forward).'&verify='.$verify);
	}
	/*提交退出请求**/
  function post_logout(){
        $action = 'logout';
        $txt="time=".$timestamp;
        $auth=passport_encrypt($txt,$this->cfg[passport_key]);
        $forward=$GLOBALS[forward];
        $verify=md5($action.$auth.$forward.$this->cfg[passport_key]);
        header('Location: '.$this->cfg[passport_api].'?action='.$action.'&auth='.urlencode($auth).'&forward='.urlencode($forward).'&verify='.$verify);
        exit;
  }
}

/**
        * Passport 加密函数
        *
        * @param                string                等待加密的原字串
        * @param                string                私有密匙(用于解密和加密)
        *
        * @return        string                原字串经过私有密匙加密后的结果
        */
function passport_encrypt($txt, $key) {
	// 使用随机数发生器产生 0~32000 的值并 MD5()
	srand((double)microtime() * 1000000);
	$encrypt_key = md5(rand(0, 32000));
	// 变量初始化
	$ctr = 0;
	$tmp = '';
	// for 循环，$i 为从 0 开始，到小于 $txt 字串长度的整数
	for($i = 0; $i < strlen($txt); $i++) {
		// 如果 $ctr = $encrypt_key 的长度，则 $ctr 清零
		$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
		// $tmp 字串在末尾增加两位，其第一位内容为 $encrypt_key 的第 $ctr 位，
		// 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
		$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
	}

	// 返回结果，结果为 passport_key() 函数返回值的 base65 编码结果
	return base64_encode(passport_key($tmp, $key));
}

/**
        * Passport 解密函数
        *
        * @param                string                加密后的字串
        * @param                string                私有密匙(用于解密和加密)
        *
        * @return        string                字串经过私有密匙解密后的结果
        */
function passport_decrypt($txt, $key) {
	// $txt 的结果为加密后的字串经过 base64 解码，然后与私有密匙一起，
	// 经过 passport_key() 函数处理后的返回值
	$txt = passport_key(base64_decode($txt), $key);

	// 变量初始化
	$tmp = '';
	// for 循环，$i 为从 0 开始，到小于 $txt 字串长度的整数
	for ($i = 0; $i < strlen($txt); $i++) {
		// $tmp 字串在末尾增加一位，其内容为 $txt 的第 $i 位，
		// 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
		$tmp .= $txt[$i] ^ $txt[++$i];
	}
	// 返回 $tmp 的值作为结果
	return $tmp;
}
/**
        * Passport 密匙处理函数
        *
        * @param                string                待加密或待解密的字串
        * @param                string                私有密匙(用于解密和加密)
        *
        * @return        string                处理后的密匙
        */
function passport_key($txt, $encrypt_key) {
	// 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
	$encrypt_key = md5($encrypt_key);

	// 变量初始化
	$ctr = 0;
	$tmp = '';
	// for 循环，$i 为从 0 开始，到小于 $txt 字串长度的整数
	for($i = 0; $i < strlen($txt); $i++) {
		// 如果 $ctr = $encrypt_key 的长度，则 $ctr 清零
		$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
		// $tmp 字串在末尾增加一位，其内容为 $txt 的第 $i 位，
		// 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
		$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
	}

	// 返回 $tmp 的值作为结果
	return $tmp;
}
/**
        * Passport 信息(数组)编码函数
        *
        * @param                array                待编码的数组
        *
        * @return        string                数组经编码后的字串
        */
function passport_encode($array) {
	// 数组变量初始化
	$arrayenc = array();
	// 遍历数组 $array，其中 $key 为当前元素的下标，$val 为其对应的值
	foreach($array as $key => $val) {
		// $arrayenc 数组增加一个元素，其内容为 "$key=经过 urlencode() 后的 $val 值"
		$arrayenc[] = $key.'='.urlencode($val);
	}
	// 返回以 "&" 连接的 $arrayenc 的值(implode)，例如 $arrayenc = array('aa', 'bb', 'cc', 'dd')，
	// 则 implode('&', $arrayenc) 后的结果为 ”aa&bb&cc&dd"
	return implode('&', $arrayenc);
}